因為docker-compose的參數項目一樣巨多,這邊先列出常用的,詳情一樣請左轉Compose specification | Docker Documentation

docker-compose.yaml,由幾個部分組成:定義容器的Service、定義網路的Network和定義永久儲存資料的Volume,因為篇幅也是挺大的,就一天講一個吧:
Service : Service 主要是在定義應用服務啟動時,用來執行的 container 相關資訊,比如說 image 是用哪個、是不是要透過 Dockerfile 先進行編譯、要不要覆寫預設 command 或是 entrypoint、環境變數為何、port 導出與對應等等的,這些參數多半在 docker run 指令有相對應的參數。
image:指定container要使用哪個imagenetworks:container加入的網路,此設定需要參考最外層 networks 的設定build:定義在build container時需要的資料command:會overwrite image的 CMD 內容,為容器一啟動變執行的指令container_name:自定義的容器名稱,須符合[a-zA-Z0-9][a-zA-Z0-9_.-]+ 正則表達式,等同於docker run --name
restart:當容器crash時的動作
restart: "no":預設行為,在任何情況皆不重啟
restart: always:若crash永遠會重新啟動,除非container移除restart: on-failure:若exit code為錯誤則重啟unless-stopped:關閉的容器會永遠關閉,除非手動再啟動port:對外開放的port,等同於docker run -p
volumes:設定 container 要使用的volume,相同於docker run --v,此部分和networks一樣需要參考最外層 volume 的設定secrets:可以使container得以存取一些機密資料(定義於外層的secret),比如簽章、證書等等services:
 frontend:
   image: awesome/webapp
   secrets:
     - server-certificate
secrets:
 server-certificate:
   file: ./server.cert
env_file:指定以檔案形式描述環境變數的檔案位置VAR[=[VAL]]
environment:一樣是指定環境變數的方式,但比env_file為優先,以下兩種都是有效的寫法environment:
  RACK_ENV: development
  SHOW: "true"
  USER_INPUT:
environment:
  - RACK_ENV=development
  - SHOW=true
  - USER_INPUT